package com.lovely3x.jobservice.serializer;

import com.lovely3x.jobservice.JobService;
import com.lovely3x.jobservice.task.Progress;
import com.lovely3x.jobservice.task.Task;

import java.util.List;

/**
 * 任务序列化器
 * Created by lovely3x on 16-1-29.
 */
public interface TaskSerializer {

    /**
     * 序列化被创建执行
     *
     * @param jobService 服务
     */
    void onCreate(JobService jobService);

    /**
     * 序列化器即将被销毁
     */
    void onDestroy();

    /**
     * 序列化
     *
     * @param task 需要序列化的任务
     * @return 是否序列化成功
     */
    boolean serialize(Task task);

    /**
     * 序列化任务组
     *
     * @param tasks 需要序列化的任务
     * @return true or false
     */
    boolean serialize(List<? extends Task> tasks);


    /**
     * 序列化进度
     *
     * @param task 需要序列化的进度对象
     * @return 是否序列化成功
     */
    boolean serializeProgress(Progress task);

    /**
     * 序列化进度组
     *
     * @param tasks 需要序列化的进度
     * @return true or false
     */
    boolean serializeProgresses(List<? extends Progress> tasks);

    /**
     * 反序列化任务列表
     */
    List<? extends Task> deserializeTask();

    /**
     * 反序列化任务进度
     *
     * @return 反序列化的任务进度表
     */
    List<? extends Progress> deserializeProgress();

    /**
     * 删除任务
     *
     * @param taskWhat 需要删除的任务的标识
     * @return 是否删除成功
     */
    boolean deleteTask(long taskWhat);

    /**
     * 删除任务进度
     *
     * @param taskWhat 需要删除的进度的任务标识
     * @return 是否删除成功
     */
    boolean deleteProgress(long taskWhat);

    /**
     * 删除这个序列化器的所有进度
     *
     * @return 是否删除成功
     */
    boolean deleteProgresses();


    /**
     * 删除这个序列化器的所有任务
     *
     * @return 是否删除成功
     */
    boolean deleteTasks();

}
